/******************************************************************************/
/* @ All Rights Reserved Copyright (C) 2014 broada,Ltd.                       */
/*                                                                            */
/*  NAME      = mstds_core.h                                                  */
/*  NOTE      =                                                               */
/*  DATE      = 2014/09/28 by zhengxd                                         */
/******************************************************************************/
#ifndef _MSTDS_CORE_H_
#define _MSTDS_CORE_H_

/* bind数据/类型 */
typedef struct __st_mstds_bind
{
    unsigned char uc_bind_type;        /* bind类型 */
    char *p_value;                       /* bind值 */
    struct __st_mstds_bind_type *p_next_bind;

}Mstds_bind;

/* prepare SQL文 */
typedef struct __st_mstds_prepare_sql
{
    unsigned int ui_uid;              /* 每条prepare对应的唯一ID */
    char *p_sql;                       /* SQL文 */
    unsigned int ui_sql_len;          /* SQL文长度 */
    Mstds_bind *p_lst_bind_type;        /* prepare参数 */
} Mstds_prepare_sql;

/* 请求的输出结构 */
typedef struct __st_mstds_out_request
{
    char *p_sql;                         /* sql文 */
    Mstds_bind *p_lst_bind_p_value;       /* sql参数 */
} Mstds_out_request;

/* 响应的输出结构 */
typedef struct __st_mstds_out_response
{
    unsigned int ui_rows;               /* select,insert,update,delete 的行数 */
} Mstds_out_response;

/* TDS session信息 */
typedef struct __st_mstds_session
{
    char *p_cli_host_user;                /* 客户端的主机名 */
    char *p_program;                      /* 客户端的程序名 */

    char *p_svr_host;                     /* 服务端IP */
    unsigned short us_svr_port;          /* 服务端端口 */

    char *p_db_sid;                       /* 数据库的SID */
    char *p_db_user;                      /* 登录数据库的用户名 */
    char *p_tds_version;                  /* TDS协议版本 */
    char *p_tds_charset;                  /* TDS charset */

} Mstds_session;

/* 判断当前数据链路是否是TDS协议的 */
int mstds_detect(Conntrack *p_st_conn);

/* tds协议解析 */
int mstds_analysis(Conntrack *p_st_conn, Frstr *p_str);

#endif
